অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (Object-Oriented Programming) in Groovy
Groovy একটি ডাইনামিক প্রোগ্রামিং ভাষা যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণার উপর ভিত্তি করে তৈরি। Groovy তে OOP এর মূল নীতিগুলি যেমন ইনক্যাপসুলেশন, এবস্ট্রাকশন, পলিমরফিজম, এবং ইনহেরিটেন্স সহজেই প্রয়োগ করা যায়। Groovy তে অবজেক্ট-ওরিয়েন্টেড ধারণাগুলি Java এর মতোই কাজ করে, তবে Groovy এর সিনট্যাক্স অনেক সহজ এবং কোডের লেখা আরও সংক্ষিপ্ত ও পড়তে সহজ।
এখানে Groovy তে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর মূল ধারণাগুলি আলোচনা করা হয়েছে।
1. ক্লাস (Class) এবং অবজেক্ট (Object)
Groovy তে ক্লাস তৈরি করা খুবই সহজ। একটি ক্লাস একটি টেমপ্লেট বা ব্লুপ্রিন্ট হিসেবে কাজ করে, যা অবজেক্ট তৈরি করতে ব্যবহৃত হয়। Groovy তে ক্লাসের মধ্যে মেথড, প্রপার্টি এবং কন্সট্রাক্টর থাকতে পারে।
1.1 ক্লাস ডিফাইন করা
Groovy তে ক্লাস ডিফাইন করার জন্য class কীওয়ার্ড ব্যবহার করা হয়।
class Person {
String name
int age
// Constructor
Person(String name, int age) {
this.name = name
this.age = age
}
// Method
def greet() {
println "Hello, my name is $name and I am $age years old."
}
}এখানে, Person নামে একটি ক্লাস তৈরি করা হয়েছে, যার মধ্যে দুটি প্রপার্টি (name এবং age) এবং একটি মেথড (greet) রয়েছে।
1.2 অবজেক্ট তৈরি করা
একবার ক্লাস তৈরি হলে, আপনি সেই ক্লাসের অবজেক্ট তৈরি করতে পারেন।
def person = new Person("John", 30)
person.greet() // Output: Hello, my name is John and I am 30 years old.এখানে, Person ক্লাসের একটি অবজেক্ট person তৈরি করা হয়েছে এবং greet() মেথড কল করা হয়েছে।
2. ইনহেরিটেন্স (Inheritance)
Groovy তে ইনহেরিটেন্স ব্যবহার করে একটি ক্লাস অন্য একটি ক্লাস থেকে প্রপার্টি এবং মেথড উত্তরাধিকারসূত্রে পেতে পারে। এটি কোড পুনঃব্যবহার এবং মডুলার ডিজাইন তৈরি করতে সহায়তা করে।
2.1 ইনহেরিটেন্স উদাহরণ
class Animal {
String name
def speak() {
println "The animal speaks."
}
}
class Dog extends Animal {
def speak() {
println "The dog barks."
}
}
def dog = new Dog(name: "Rex")
dog.speak() // Output: The dog barks.এখানে, Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে। Dog ক্লাসে speak() মেথডটি ওভাররাইড করা হয়েছে।
2.2 Super Keyword
Groovy তে আপনি super কিওয়ার্ড ব্যবহার করে সুপার ক্লাসের মেথড বা কন্সট্রাক্টর কল করতে পারেন।
class Dog extends Animal {
Dog(String name) {
super(name)
}
def speak() {
super.speak() // Calling the speak method of Animal class
println "The dog barks."
}
}
def dog = new Dog("Rex")
dog.speak()এখানে, Dog ক্লাসের speak() মেথডে super.speak() ব্যবহার করে সুপার ক্লাস Animal এর speak() মেথড কল করা হয়েছে।
3. পলিমরফিজম (Polymorphism)
পলিমরফিজম হল এমন একটি ধারণা, যার মাধ্যমে একাধিক ক্লাস একই নামের মেথড ব্যবহার করতে পারে, তবে তাদের কার্যকারিতা ভিন্ন হতে পারে। Groovy তে পলিমরফিজম মেথড ওভারলোডিং এবং মেথড ওভাররাইডিং এর মাধ্যমে অর্জিত হয়।
3.1 মেথড ওভাররাইডিং (Method Overriding)
class Animal {
def sound() {
println "Animal makes a sound."
}
}
class Dog extends Animal {
@Override
def sound() {
println "Dog barks."
}
}
class Cat extends Animal {
@Override
def sound() {
println "Cat meows."
}
}
def animal = new Dog()
animal.sound() // Output: Dog barks.
animal = new Cat()
animal.sound() // Output: Cat meows.এখানে, Dog এবং Cat ক্লাস দুটি sound() মেথডকে ওভাররাইড করেছে। যদিও sound() মেথডের নাম একই, তাদের কার্যকারিতা ভিন্ন।
4. ইনক্যাপসুলেশন (Encapsulation)
ইনক্যাপসুলেশন হল একটি ধারণা যেখানে ডেটা (প্রপার্টি) এবং কার্যক্রম (মেথড) একসাথে গ্রুপ করা হয় এবং বাইরের কোড থেকে ডেটা অ্যাক্সেস সীমিত করা হয়। Groovy তে আপনি private, protected, এবং public অ্যাক্সেস মডিফায়ার ব্যবহার করে ইনক্যাপসুলেশন প্রয়োগ করতে পারেন।
4.1 ইনক্যাপসুলেশন উদাহরণ
class BankAccount {
private double balance = 0.0 // Private variable
def deposit(double amount) {
if (amount > 0) {
balance += amount
}
}
def getBalance() {
return balance
}
}
def account = new BankAccount()
account.deposit(100)
println account.getBalance() // Output: 100.0এখানে, balance প্রপার্টি private রাখা হয়েছে, যার মানে হলো বাইরের কোড থেকে এটি সরাসরি অ্যাক্সেস করা যাবে না। তবে, আমরা deposit() এবং getBalance() মেথডের মাধ্যমে এর মান পরিবর্তন এবং অ্যাক্সেস করতে পারি।
5. অ্যাবস্ট্রাকশন (Abstraction)
অ্যাবস্ট্রাকশন হল এমন একটি ধারণা যার মাধ্যমে আপনি একটি ক্লাসের অপ্রয়োজনীয় অংশ লুকিয়ে রাখেন এবং কেবলমাত্র প্রয়োজনীয় বৈশিষ্ট্যগুলো প্রদর্শন করেন। Groovy তে এটি সাধারণত অ্যাবস্ট্রাক্ট ক্লাস বা ইন্টারফেস ব্যবহার করে অর্জন করা হয়।
5.1 অ্যাবস্ট্রাক্ট ক্লাস
abstract class Animal {
abstract def sound()
def sleep() {
println "Sleeping..."
}
}
class Dog extends Animal {
def sound() {
println "Bark"
}
}
def dog = new Dog()
dog.sound() // Output: Bark
dog.sleep() // Output: Sleeping...এখানে, Animal একটি অ্যাবস্ট্রাক্ট ক্লাস যা sound() মেথডের একটি সিগনেচার সংরক্ষণ করে। Dog ক্লাস এই মেথডটি ওভাররাইড করে তার বাস্তবায়ন প্রদান করেছে।
6. কন্সট্রাক্টর (Constructor)
Groovy তে কন্সট্রাক্টর তৈরি করা খুবই সহজ। সাধারণত কন্সট্রাক্টর ব্যবহার করা হয় অবজেক্ট তৈরির সময় প্রপার্টি ইনিশিয়ালাইজ করতে।
6.1 কন্সট্রাক্টর উদাহরণ
class Person {
String name
int age
// Constructor
Person(String name, int age) {
this.name = name
this.age = age
}
def introduce() {
println "My name is $name and I am $age years old."
}
}
def person = new Person("John", 30)
person.introduce() // Output: My name is John and I am 30 years old.এখানে, Person ক্লাসের কন্সট্রাক্টরটি দুটি আর্গুমেন্ট গ্রহণ করে এবং ক্লাসের প্রপার্টি ইনিশিয়ালাইজ করে।
সারসংক্ষেপ
Groovy তে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) সম্পূর্ণভাবে সমর্থিত। ক্লাস এবং অবজেক্ট এর মাধ্যমে আপনি ডেটা এবং কার্যক্রম ম্যানেজ করতে পারেন, ইনহেরিটেন্স এবং পলিমরফিজম এর মাধ্যমে কোড পুন
ঃব্যবহারযোগ্য ও নমনীয় করতে পারেন, এবং ইনক্যাপসুলেশন এবং অ্যাবস্ট্রাকশন এর মাধ্যমে ডেটা নিরাপত্তা এবং সহজ ব্যবহারের সুবিধা পেতে পারেন। Groovy তে OOP এর সুবিধাগুলি সহজ এবং কার্যকরীভাবে প্রয়োগ করা যায়, যা Java এর তুলনায় আরও সহজ ও শক্তিশালী।
Groovy তে Class এবং Object এর ধারণা
Groovy তে Class এবং Object এর ধারণা মূলত Object-Oriented Programming (OOP) এর উপর ভিত্তি করে। Class এবং Object ব্যবহার করে আমরা বাস্তব জীবনের বিভিন্ন বিষয় বা ধারণাকে কোডের মাধ্যমে মডেল করতে পারি।
1. Class এর ধারণা
Class হলো একটি ব্লুপ্রিন্ট বা কাঠামো যা কোনো বস্তু বা বিষয়ের বৈশিষ্ট্য এবং আচরণ সংজ্ঞায়িত করে। Class এর মধ্যে properties (অর্থাৎ ভেরিয়েবল) এবং methods (অর্থাৎ ফাংশন) থাকতে পারে, যা একটি নির্দিষ্ট ধরনের অবজেক্টকে নির্দেশ করে।
Class ডিক্লারেশন
Groovy তে একটি Class ডিক্লার করতে class কীওয়ার্ড ব্যবহার করা হয়। Class এর ভেতরে properties এবং methods ডিক্লার করা হয়।
class Person {
String name
int age
def introduce() {
println "Hello, my name is $name and I am $age years old."
}
}উপরে Person নামে একটি Class তৈরি করা হয়েছে, যেখানে name এবং age নামে দুইটি properties আছে এবং introduce() নামে একটি method রয়েছে।
2. Object এর ধারণা
Object হলো Class এর একটি নির্দিষ্ট উদাহরণ বা instance। অর্থাৎ, Object হল একটি বাস্তবজীবনের কোনো নির্দিষ্ট বিষয় বা বস্তু যা Class দ্বারা মডেল করা হয়। Object তৈরি করতে new কীওয়ার্ড ব্যবহার করা হয়।
Object তৈরি এবং ব্যবহার
def person1 = new Person(name: "Alice", age: 25)
def person2 = new Person(name: "Bob", age: 30)
person1.introduce() // Output: Hello, my name is Alice and I am 25 years old.
person2.introduce() // Output: Hello, my name is Bob and I am 30 years old.এখানে person1 এবং person2 হল Person Class এর Object, যেখানে name এবং age প্রপার্টিগুলির মান সেট করা হয়েছে এবং introduce() মেথড কল করা হয়েছে।
3. Constructor
Constructor হলো একটি বিশেষ মেথড যা Object তৈরি করার সময় প্রাথমিক মান সেট করতে সাহায্য করে। Groovy তে Constructor ডিফাইন করা ঐচ্ছিক, কারণ Groovy Class এর জন্য একটি ডিফল্ট কন্সট্রাক্টর তৈরি করে। তবে, আপনি চাইলে নিজস্ব Constructor ও তৈরি করতে পারেন।
Custom Constructor উদাহরণ
class Person {
String name
int age
// Custom Constructor
Person(String name, int age) {
this.name = name
this.age = age
}
def introduce() {
println "Hello, my name is $name and I am $age years old."
}
}
def person = new Person("Charlie", 35)
person.introduce() // Output: Hello, my name is Charlie and I am 35 years old.এখানে Person Class এ একটি Custom Constructor তৈরি করা হয়েছে যা name এবং age প্রপার্টি সেট করে।
4. Properties এবং Methods
Properties হল একটি Class এর ভেরিয়েবল যা Object এর বৈশিষ্ট্য ধারণ করে। Methods হলো ফাংশন যা Class এর আচরণ নির্দেশ করে। Groovy তে Properties এবং Methods সহজেই ডিক্লার করা যায়।
class Car {
String brand
int year
def start() {
println "$brand car started."
}
}
def car = new Car(brand: "Toyota", year: 2022)
car.start() // Output: Toyota car started.5. Encapsulation
Encapsulation হলো Object Oriented Programming এর একটি মূলনীতি যা Class এর properties এবং methods কে প্যাকেজ আকারে রাখে এবং তাদেরকে সরাসরি access না করে method এর মাধ্যমে access করতে উৎসাহিত করে। Groovy তে private access modifier দিয়ে properties কে encapsulate করা হয়।
class BankAccount {
private double balance = 0.0
def deposit(double amount) {
balance += amount
}
def getBalance() {
return balance
}
}
def account = new BankAccount()
account.deposit(500)
println account.getBalance() // Output: 500.0এখানে balance প্রপার্টিকে private করে রাখা হয়েছে এবং deposit এবং getBalance মেথডের মাধ্যমে এক্সেস করা হচ্ছে।
6. Inheritance
Groovy তে Inheritance ব্যবহার করে একটি Class অন্য একটি Class এর বৈশিষ্ট্য এবং আচরণ উত্তরাধিকারসূত্রে পেতে পারে। এটি OOP এর একটি মূলনীতি, যা কোডের পুনঃব্যবহারকে উৎসাহিত করে।
class Animal {
def eat() {
println "Eating..."
}
}
class Dog extends Animal {
def bark() {
println "Barking..."
}
}
def dog = new Dog()
dog.eat() // Output: Eating...
dog.bark() // Output: Barking...এখানে Dog Class Animal Class কে extends করেছে, তাই Dog Class Animal এর মেথড eat() ব্যবহার করতে পারছে।
সারসংক্ষেপ
Groovy তে Class এবং Object এর মাধ্যমে OOP এর ধারণাগুলি সহজে প্রয়োগ করা যায়। Groovy তে Class তৈরি করে তার প্রোপার্টি এবং মেথড সংজ্ঞায়িত করা হয় এবং Object এর মাধ্যমে তাদের ব্যবহার করা হয়। Class এবং Object ব্যবহার করে Encapsulation, Inheritance এর মতো OOP এর মূলনীতিগুলি সহজেই বাস্তবায়ন করা যায়।
Properties এবং Methods এর ডিক্লারেশন in Groovy
Groovy তে properties এবং methods ডিফাইন করা এবং ব্যবহার করা খুবই সহজ এবং সাধারণ। Groovy তে getter এবং setter মেথডগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়, তাই আপনি সহজেই প্রপার্টি ডিক্লেয়ার করতে পারেন এবং মেথড ডিফাইন করতে পারেন। এখানে properties এবং methods কীভাবে ডিক্লেয়ার এবং ব্যবহার করা হয় তা বিস্তারিতভাবে আলোচনা করা হলো।
১. Properties (প্রপার্টি)
Properties হল সেই সদস্য ভেরিয়েবলগুলি (fields) যা ক্লাসের অংশ এবং তার মান সরাসরি অ্যাক্সেস করা যায়। Groovy তে, প্রপার্টি ডিক্লেয়ার করার সময় getter এবং setter মেথডগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।
Property Declaration:
Groovy তে একটি প্রপার্টি সাধারণত def কীওয়ার্ড দিয়ে ডিফাইন করা হয় এবং এর জন্য getter এবং setter স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়।
Property Declaration এর উদাহরণ:
class Person {
def name // প্রপার্টি ডিক্লেয়ারেশন
def age
}
def person = new Person(name: "Alice", age: 25)
println person.name // আউটপুট: Alice
println person.age // আউটপুট: 25এখানে:
nameএবংageহলPersonক্লাসের প্রপার্টি।- আমরা
new Person(name: "Alice", age: 25)দিয়ে একটি অবজেক্ট তৈরি করেছি এবং প্রপার্টির মান অ্যাক্সেস করেছি।
Groovy তে প্রপার্টি ডিফাইন করার সময় getter এবং setter মেথডগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়, তাই আপনি সরাসরি প্রপার্টির মান অ্যাসাইন বা অ্যাক্সেস করতে পারেন।
Property with Getter and Setter:
class Person {
private String name
// Getter
String getName() {
return name
}
// Setter
void setName(String name) {
this.name = name
}
}
def person = new Person()
person.setName("John")
println person.getName() // আউটপুট: Johnএখানে, getName() এবং setName() মেথডগুলো প্রপার্টি name এর জন্য getter এবং setter হিসেবে কাজ করছে।
২. Methods (মেথড)
Methods হল ক্লাসের মধ্যে ডিফাইন করা ফাংশন যা এক বা একাধিক কাজ সম্পন্ন করে। Groovy তে মেথড ডিফাইন করার জন্য def কীওয়ার্ড ব্যবহৃত হয় এবং তারপরে মেথডের নাম, প্যারামিটার এবং কোডের ব্লক থাকে।
Method Declaration:
Groovy তে মেথড ডিফাইন করার জন্য সাধারণত def কীওয়ার্ড ব্যবহৃত হয়, এবং তারপরে মেথডের নাম ও প্যারামিটার দেওয়া হয়।
Method Declaration এর উদাহরণ:
class Person {
def name
def age
// মেথড ডিক্লেয়ার করা
def greet() {
println "Hello, my name is $name and I am $age years old."
}
}
def person = new Person(name: "Alice", age: 30)
person.greet() // আউটপুট: Hello, my name is Alice and I am 30 years old.এখানে:
greet()একটি মেথড যাnameএবংageপ্রপার্টি থেকে মান নিয়ে একটি গ্রীটিং বার্তা প্রিন্ট করে।greet()মেথডকে কল করার মাধ্যমে প্রপার্টির মান প্রদর্শন করা হয়েছে।
Method with Parameters:
class Calculator {
// দুটি সংখ্যার যোগফল বের করার মেথড
def add(a, b) {
return a + b
}
}
def calc = new Calculator()
def result = calc.add(5, 3)
println result // আউটপুট: 8এখানে:
add(a, b)একটি মেথড যা দুটি প্যারামিটার নিয়ে তাদের যোগফল রিটার্ন করে।
Method with Return Value:
class Calculator {
// দুটি সংখ্যার গুণফল বের করার মেথড
def multiply(a, b) {
return a * b
}
}
def calc = new Calculator()
def result = calc.multiply(4, 3)
println result // আউটপুট: 12এখানে:
multiply(a, b)মেথড দুটি প্যারামিটার নেয় এবং তাদের গুণফল রিটার্ন করে।
৩. Property এবং Method এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Properties | Methods |
|---|---|---|
| ডিফাইনেশন | ভেরিয়েবল হিসাবে ডিফাইন করা হয় | ফাংশন হিসাবে ডিফাইন করা হয় |
| অ্যাক্সেস | সরাসরি মান অ্যাক্সেস করা যায় | ফাংশন কল করে কাজ সম্পাদন করা হয় |
| টাইপ | প্রপার্টি সাধারণত ভেরিয়েবল | মেথড সাধারণত ফাংশন |
| Getter / Setter | স্বয়ংক্রিয়ভাবে তৈরি হয় | মেথডের মধ্যে ডিফাইন করা হয় |
| উদাহরণ | def name | def greet() |
সারাংশ
- Properties (প্রপার্টি): Groovy তে properties হল ভেরিয়েবল যা ক্লাসের অংশ এবং এগুলি সরাসরি অ্যাক্সেস করা যায়। Groovy তে প্রপার্টি ডিক্লেয়ার করার সময় স্বয়ংক্রিয়ভাবে getter এবং setter মেথড তৈরি হয়।
- Methods (মেথড): Methods হল ফাংশন যা কোডের একটি নির্দিষ্ট কাজ সম্পন্ন করে। Groovy তে মেথড ডিক্লেয়ার করতে
defব্যবহার করা হয় এবং মেথডের মধ্যে এক বা একাধিক প্যারামিটার ব্যবহার করা যেতে পারে।
Groovy তে প্রপার্টি এবং মেথডের ব্যবহার খুবই সহজ এবং কার্যকর, যা কোড লেখাকে আরও পরিষ্কার ও দ্রুততর করে।
Groovy তে Constructors এবং Default Parameters
Constructors এবং Default Parameters দুটি গুরুত্বপূর্ণ ধারণা যা Groovy তে ক্লাস এবং অবজেক্ট তৈরি করার সময় ব্যবহৃত হয়। এগুলি কোড লেখার সময় লজিকালভাবে সুবিধাজনক হয় এবং কোডের পুনঃব্যবহারযোগ্যতা এবং নমনীয়তা বৃদ্ধি করে।
1. Constructors in Groovy
Constructor একটি বিশেষ ধরনের মেথড যা একটি ক্লাসের নতুন অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এটি সাধারণত ক্লাসের নামের সাথে মিল হয় এবং কোন ভ্যালু বা প্যারামিটার ছাড়া অবজেক্ট তৈরি করা হলে ডিফল্ট কন্সট্রাক্টর ব্যবহার করা হয়। Groovy তে কন্সট্রাক্টরের ব্যবহার Java এর মতোই, তবে Groovy এর বৈশিষ্ট্য অনুযায়ী এটি আরও সহজ এবং সংক্ষিপ্ত।
Groovy তে Constructor এর মৌলিক ব্যবহার:
Groovy তে, আপনি কন্সট্রাক্টর ডিফাইন করতে পারেন যেটি প্যারামিটার গ্রহণ করে এবং অবজেক্ট ইনিশিয়ালাইজ করে। যদি আপনি কন্সট্রাক্টর ডিফাইন না করেন, Groovy স্বয়ংক্রিয়ভাবে একটি ডিফল্ট কন্সট্রাক্টর প্রদান করে।
উদাহরণ (Constructor with Parameters):
class Person {
String name
int age
// Constructor
Person(String name, int age) {
this.name = name
this.age = age
}
// Method to display details
void displayDetails() {
println "Name: $name, Age: $age"
}
}
def person = new Person("John", 30)
person.displayDetails() // Output: Name: John, Age: 30এখানে Person ক্লাসে একটি কন্সট্রাক্টর রয়েছে যা name এবং age প্যারামিটার গ্রহণ করে। যখন new Person("John", 30) কল করা হয়, তখন এই কন্সট্রাক্টর ব্যবহার করে অবজেক্ট তৈরি হয়।
Groovy তে Default Constructor:
যদি আপনি কন্সট্রাক্টর না দেন, তবে Groovy স্বয়ংক্রিয়ভাবে একটি ডিফল্ট কন্সট্রাক্টর প্রদান করবে যা কোনো প্যারামিটার গ্রহণ করবে না।
class Person {
String name
int age
// Default constructor
}
def person = new Person() // No parameters, default constructor used
person.name = "Alice"
person.age = 25
println "Name: $person.name, Age: $person.age" // Output: Name: Alice, Age: 25এখানে, Person ক্লাসে কোনো কন্সট্রাক্টর ডিফাইন না করায় Groovy একটি ডিফল্ট কন্সট্রাক্টর ব্যবহার করেছে এবং পরে ভেরিয়েবলগুলির মান সেট করা হয়েছে।
2. Default Parameters in Groovy
Groovy তে আপনি default parameters ব্যবহার করতে পারেন, যা ফাংশন বা কন্সট্রাক্টরের প্যারামিটারগুলির জন্য ডিফল্ট মান প্রদান করে। যদি কোনো প্যারামিটার ফাংশন বা কন্সট্রাক্টর কল করার সময় প্রদান না করা হয়, তাহলে ডিফল্ট মানটি ব্যবহার করা হবে।
উদাহরণ (Default Parameters):
class Person {
String name
int age
// Constructor with default parameters
Person(String name = "Unknown", int age = 18) {
this.name = name
this.age = age
}
void displayDetails() {
println "Name: $name, Age: $age"
}
}
def person1 = new Person("John", 30)
def person2 = new Person()
person1.displayDetails() // Output: Name: John, Age: 30
person2.displayDetails() // Output: Name: Unknown, Age: 18এখানে, Person ক্লাসের কন্সট্রাক্টরে ডিফল্ট মান দেওয়া হয়েছে:
nameএর ডিফল্ট মান"Unknown"ageএর ডিফল্ট মান18
যখন new Person() কল করা হয়, কোনো প্যারামিটার না দেয়ার কারণে ডিফল্ট মানগুলি ব্যবহার করা হয়। আর যখন new Person("John", 30) কল করা হয়, তখন প্রদত্ত মানগুলোই ব্যবহার করা হয়।
ফাংশনে Default Parameters:
Groovy তে ফাংশনেও আপনি ডিফল্ট প্যারামিটার ব্যবহার করতে পারেন। এর ফলে ফাংশনে কোনো প্যারামিটার না দেওয়া হলে ডিফল্ট মান ব্যবহার করা হবে।
def greet(String name = "Guest") {
println "Hello, $name!"
}
greet("John") // Output: Hello, John!
greet() // Output: Hello, Guest!এখানে, greet ফাংশনে name প্যারামিটারের জন্য একটি ডিফল্ট মান "Guest" দেওয়া হয়েছে। যদি ফাংশন কল করার সময় name প্রদান করা না হয়, তাহলে "Guest" ব্যবহার হবে।
3. Constructor Overloading
Groovy তে, যেমন Java তে, কন্সট্রাক্টর ওভারলোডিং সম্ভব। আপনি একাধিক কন্সট্রাক্টর ডিফাইন করতে পারেন যা ভিন্ন ভিন্ন প্যারামিটার সংখ্যা বা টাইপ গ্রহণ করবে। তবে, Groovy তে এটি Java এর মতো কঠিন নয়, কারণ Groovy স্বয়ংক্রিয়ভাবে কমপ্লেক্স কন্সট্রাক্টরও পরিচালনা করতে পারে।
উদাহরণ (Constructor Overloading):
class Person {
String name
int age
// First constructor
Person(String name) {
this.name = name
this.age = 18 // Default age
}
// Second constructor
Person(String name, int age) {
this.name = name
this.age = age
}
void displayDetails() {
println "Name: $name, Age: $age"
}
}
def person1 = new Person("John")
def person2 = new Person("Alice", 30)
person1.displayDetails() // Output: Name: John, Age: 18
person2.displayDetails() // Output: Name: Alice, Age: 30এখানে, Person ক্লাসে দুটি কন্সট্রাক্টর রয়েছে:
- একটি কন্সট্রাক্টর যা শুধুমাত্র
nameগ্রহণ করে এবংageএর ডিফল্ট মান প্রদান করে। - আরেকটি কন্সট্রাক্টর যা
nameএবংageউভয়ই গ্রহণ করে।
সারসংক্ষেপ:
- Constructors: Groovy তে, constructors ক্লাসের অবজেক্ট তৈরি করতে ব্যবহৃত হয়। আপনি কন্সট্রাক্টর প্যারামিটারসহ অথবা ডিফল্ট কন্সট্রাক্টর ব্যবহার করতে পারেন।
- Default Parameters: Groovy তে, আপনি ফাংশন বা কন্সট্রাক্টরের প্যারামিটারগুলির জন্য ডিফল্ট মান প্রদান করতে পারেন, যাতে প্যারামিটার না দিলে ডিফল্ট মান ব্যবহার করা হয়।
- Constructor Overloading: Groovy তে, একাধিক কন্সট্রাক্টর ডিফাইন করা সম্ভব এবং এটি প্যারামিটার সংখ্যা বা টাইপের ওপর ভিত্তি করে কাজ করে।
এভাবে Groovy তে constructors এবং default parameters ব্যবহার করে কোডকে আরও নমনীয়, সহজ এবং পুনঃব্যবহারযোগ্য করা যায়।
Inheritance, Polymorphism, এবং Interfaces in Groovy
Groovy তে Inheritance, Polymorphism, এবং Interfaces অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর মূল নীতি যা কোড পুনঃব্যবহারযোগ্য, মডুলার এবং ডায়নামিক প্রোগ্রামিংয়ের জন্য সহায়ক। Groovy তে এই ধারণাগুলি Java এর মতো কাজ করে, তবে এর সিনট্যাক্স অনেকটা সহজ ও সংক্ষিপ্ত।
এখানে Inheritance, Polymorphism, এবং Interfaces সম্পর্কে বিস্তারিত আলোচনা করা হলো।
1. Inheritance (ইনহেরিটেন্স)
ইনহেরিটেন্স হল একটি অবজেক্ট-ওরিয়েন্টেড ধারণা যেখানে একটি ক্লাস অন্য ক্লাসের বৈশিষ্ট্য (প্রপার্টি এবং মেথড) উত্তরাধিকারসূত্রে পায়। এটি কোড পুনঃব্যবহারযোগ্যতার জন্য সহায়ক, কারণ আমরা বিদ্যমান কোডের উপর নতুন বৈশিষ্ট্য বা ফাংশনালিটি যোগ করতে পারি।
1.1 ইনহেরিটেন্স উদাহরণ
// Superclass
class Animal {
String name
def speak() {
println "$name makes a sound"
}
}
// Subclass
class Dog extends Animal {
def speak() {
println "$name barks"
}
}
def dog = new Dog(name: "Rex")
dog.speak() // Output: Rex barksএখানে, Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে এবং speak() মেথডটি ওভাররাইড করেছে।
1.2 Super Keyword
আপনি super কিওয়ার্ড ব্যবহার করে সুপার ক্লাসের মেথড অথবা কন্সট্রাক্টর কল করতে পারেন।
class Animal {
String name
Animal(String name) {
this.name = name
}
def speak() {
println "$name makes a sound"
}
}
class Dog extends Animal {
Dog(String name) {
super(name)
}
def speak() {
super.speak() // Calling the speak method of Animal class
println "$name barks"
}
}
def dog = new Dog("Rex")
dog.speak()এখানে, Dog ক্লাসে super.speak() ব্যবহার করে Animal ক্লাসের speak() মেথড কল করা হয়েছে।
2. Polymorphism (পলিমরফিজম)
পলিমরফিজম হল এমন একটি ধারণা যেখানে একাধিক ক্লাস একই নামের মেথড ব্যবহার করতে পারে, তবে তাদের কার্যকারিতা ভিন্ন হতে পারে। Groovy তে পলিমরফিজম মেথড ওভাররাইডিং এবং ওভারলোডিং এর মাধ্যমে অর্জিত হয়।
2.1 মেথড ওভাররাইডিং (Method Overriding)
class Animal {
def sound() {
println "Animal makes a sound"
}
}
class Dog extends Animal {
@Override
def sound() {
println "Dog barks"
}
}
class Cat extends Animal {
@Override
def sound() {
println "Cat meows"
}
}
def dog = new Dog()
dog.sound() // Output: Dog barks
def cat = new Cat()
cat.sound() // Output: Cat meowsএখানে, Dog এবং Cat ক্লাস দুটি sound() মেথডের কার্যকারিতা ভিন্নভাবে বাস্তবায়ন করেছে, যদিও মেথডের নাম এক। এটি পলিমরফিজম।
2.2 পলিমরফিক আচরণ (Polymorphic Behavior)
Groovy তে আপনি একই ক্লাসের অবজেক্ট ব্যবহার করে বিভিন্ন আচরণ দেখতে পারেন:
def animal = new Dog()
animal.sound() // Output: Dog barks
animal = new Cat()
animal.sound() // Output: Cat meowsএখানে, animal অবজেক্টের রেফারেন্স আলাদা আলাদা ক্লাসের (Dog এবং Cat) উপর নির্ভর করে ভিন্ন ভিন্ন আচরণ প্রদর্শন করছে।
3. Interfaces (ইন্টারফেস)
Groovy তে ইন্টারফেস একটি সংজ্ঞায়িত চুক্তি যা কোন ক্লাসের মেথডের সিগনেচার সংরক্ষণ করে। একটি ক্লাস একাধিক ইন্টারফেস ইমপ্লিমেন্ট (অথবা বাস্তবায়ন) করতে পারে এবং এতে থাকা মেথডগুলির বাস্তবায়ন প্রদান করতে পারে। Groovy তে ইন্টারফেসের মাধ্যমে ক্লাসগুলির মধ্যে কম্পোজিশন এবং নমনীয়তা বৃদ্ধি করা হয়।
3.1 ইন্টারফেস ডিফাইন করা
interface Animal {
def speak()
}
class Dog implements Animal {
def speak() {
println "The dog barks"
}
}
class Cat implements Animal {
def speak() {
println "The cat meows"
}
}
def dog = new Dog()
dog.speak() // Output: The dog barks
def cat = new Cat()
cat.speak() // Output: The cat meowsএখানে, Animal একটি ইন্টারফেস এবং Dog ও Cat ক্লাস গুলি এই ইন্টারফেস ইমপ্লিমেন্ট করেছে। প্রতিটি ক্লাস তাদের নিজস্ব speak() মেথডের বাস্তবায়ন দিয়েছে।
3.2 একাধিক ইন্টারফেস ইমপ্লিমেন্ট করা
Groovy তে একটি ক্লাস একাধিক ইন্টারফেসও ইমপ্লিমেন্ট করতে পারে:
interface Animal {
def speak()
}
interface Pet {
def play()
}
class Dog implements Animal, Pet {
def speak() {
println "The dog barks"
}
def play() {
println "The dog plays"
}
}
def dog = new Dog()
dog.speak() // Output: The dog barks
dog.play() // Output: The dog playsএখানে, Dog ক্লাস দুটি ইন্টারফেস (Animal এবং Pet) ইমপ্লিমেন্ট করেছে এবং তাদের মেথডগুলির বাস্তবায়ন প্রদান করেছে।
সারসংক্ষেপ
- ইনহেরিটেন্স: Groovy তে একটি ক্লাস অন্য একটি ক্লাস থেকে বৈশিষ্ট্য (প্রপার্টি এবং মেথড) উত্তরাধিকারসূত্রে পায়, যা কোড পুনঃব্যবহারযোগ্যতার জন্য সহায়ক।
- পলিমরফিজম: একাধিক ক্লাস একই নামের মেথড ব্যবহার করতে পারে এবং তাদের কার্যকারিতা ভিন্ন হতে পারে। এটি কোডে নমনীয়তা আনে।
- ইন্টারফেস: ইন্টারফেস হল একটি চুক্তি যা ক্লাসের মেথডের সিগনেচার নির্ধারণ করে। Groovy তে ক্লাস একাধিক ইন্টারফেস ইমপ্লিমেন্ট করতে পারে।
Groovy তে Inheritance, Polymorphism, এবং Interfaces এর সহজ সিনট্যাক্স এবং শক্তিশালী ব্যবহারের মাধ্যমে কোড পুনঃব্যবহার, নমনীয়তা এবং মডুলারিটি সহজতর হয়।
Read more